<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>
<script>
    // 作用域: 函数在执行过程中的有效区域.
    // 作用域链: 在内部函数可以访问外部函数变量的这种机制，用链式查找决定哪些数据能被内部函数访问

    // #### 执行环境(或者说执行空间)（execution context）
    // 每个函数运行时都会产生一个执行环境，而这个执行环境怎么表示呢？** js为每一个执行环境关联了一个变量对象。环境中定义的所有变量和函数都保存在这个对象中。** (全局GO对象, 函数AO对象);

    // 全局变量  => 全局作用域  => 存储在window中(全局GO对象  => Global variable Object)
    /* var a = 10;
    var b = 20;
    debugger;

    function fn() {
        debugger;
        // 局部变量 => 局部作用域  => 存储在哪里? (AO对象 => Activation Object )
        var a = 100;
        var b = 200;
    }

    fn(1, 2, 3);
 */

    /*  var scope = "global";
 
     debugger;
     function fn1() {
         debugger;
         var a = 1;
         var b = 2;
         return scope;
     }
     function fn2() {
         debugger;
         return scope;
     }
     fn1();
     fn2(); */


    /* function outer() {
        var scope = "outer";
        return function() {
            return scope;
        }
    }
    var fn = outer();
    fn(); */

    var a = 1;
    debugger;
    function outer() {
        debugger;
        var scope = "outer";

        function inner() {
            debugger;
            return scope;
        }

        return inner;
    }
    var fn = outer();
    fn();
</script>

</html>